#include <string.h>
#include <stdlib.h>
#include <stdio.h>


int main(int argc, char *argv[]) {


/* Beispiele zum extrahieren von Sub-Strings beliebiger Laenge.
 * Grundprinzip ist immer das gleiche:
 * 1. Wir wissen, wie lang die konstanten Anteile der Nachricht (msg) sind (im Folgenden "const_length").
 * 2. Wir koennen bestimmen, wie lang die Nachricht tatsaechlich ist (via strlen).
 * 3. Der zu extrahierende String ist dann "strlen(msg) - const_length" lang (auch fuer malloc relevant).
 * 4. Wir inkrementieren dann den Pointer, um die Zeichen vor dem zu extrahierenden String zu ueberspringen (const_skip);
 * 5. Wir wenden strncpy an, und zwar so: "strncpy(result, msg+const_skip, strlen(msg) - const_length)".
 * Dieses Prinzip funktioniert fuer einzelne Teilstrings beliebiger Laenge, laesst sich aber auch fuer mehrere Teilstrings
 * adaptieren.
 */


char *msg1 = "+ MNM Gameserver 1.578 accepting connections";

int Versionsnummer_Groesse = strlen(msg1) - 39;

char *msg1_result = malloc(Versionsnummer_Groesse*sizeof(char)+1);

strncpy(msg1_result, msg1+17, Versionsnummer_Groesse);

strcat(msg1_result, "\0"); // Wichtig, sonst wird der Output u.U. falsch, da String-Ende unbekannt.

printf("Versionsnummer ist: %s\n", msg1_result);



/* Prinzip fuer 5. Nachricht, ein Substring konstanter Groesse und ein Substring variabler Groesse */

char *msg5 = "+ YOU 1 Martin";

int Spielernummer_Groesse = 1; // koennen wir annehmen, da Spieleranzahl < 9 und somit auch die Spielernummer.
int Spielername_Groesse = strlen(msg5) - 8;

char *msg5_result1 = malloc(Spielernummer_Groesse*sizeof(char));
char *msg5_result2 = malloc(Spielername_Groesse*sizeof(char));

strncpy(msg5_result1, msg5+6, Spielernummer_Groesse+1);
strncpy(msg5_result2, msg5+8, Spielername_Groesse+1);

strcat(msg5_result1, "\0");
strcat(msg5_result2, "\0");

printf("Spielernummer ist: %s\n", msg5_result1);
printf("Spielername ist: %s\n", msg5_result2);
}